#include "App.h"
#include <Arduino.h>

// WIFI参数
const char *SSID = "voicecomm";          // WiFi账号
const char *PASSWORD = "voicecomm"; // WiFi密码
// MQTT参数
const char *MQTT_HOST = "192.192.194.15"; // Mqtt消息服务器地址
const int MQTT_PORT = 1883;               // Mqtt消息服务器端口
const char *DEVICE_NUM = "D199749RQ5N0";  // clientId组合
const char *USER_ID = "1";
const char *PRODUCT_ID = "89";
const char *MQTT_USERNAME = "FastBee";             // Mqtt消息服务器账号
const char *MQTT_PASSWORD = "P1B255QXO75H4T02";    // Mqtt消息服务器密码
const char MQTT_SECURITY[17] = "KX3TSH4Q4OS835DO"; // Mqtt秘钥,16位
// DHT11参数
const uint8_t DHT11_PIN = 25; // GPIO25

// 消息处理
long lastMqttConn;       // 上次mqtt连接时间
long lastPublishMonitor; // 上次发布监测数据时间
long lastTimerMonitor;   // 上次定时发布监测数据

void App::init() {
    // 串口初始化
    Serial.begin(115200);
    Serial.println("[App] 正在初始化...");
    Serial.println("[Serial] 初始化成功");
    // OLED初始化
    _oled.begin();
    // DHT11初始化
    _dht11.begin();
    // WiFi初始化
    _wifi.connect();
    // MQTT初始化
    _mqtt.connect();
}

void App::run() {
    // WIFI掉线重连
    if (!_wifi.isConnected()) {
        Serial.println("[WiFi] 掉线重连...");
        _oled.showWiFiInfo(SSID, "connecting...", false);
        _wifi.connect();
    }
    _oled.showWiFiInfo(SSID, _wifi.getLocalIP().c_str(), _wifi.isConnected());

    // // 非阻塞Mqtt重连，间隔30秒
    // if (_wifi.isConnected()) {
    //     _mqtt.
    // }
    _mqtt.loop();

    // 先声明变量
    float temperature = 0.0f;
    float humidity = 0.0f;

    if (_dht11.readData(temperature, humidity)) {
        Serial.print("Temperature: ");
        Serial.print(temperature);
        Serial.print("°C\t");
        Serial.print("Humidity: ");
        Serial.print(humidity);
        Serial.println("%");
        _mqtt.publishProperty(temperature, humidity);
    } else {
        Serial.println("Failed to read from DHT sensor!");
    }

    delay(2000); // 模拟其他业务逻辑
}